package app.models;

import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.EnumType;
import javax.persistence.Enumerated;
import javax.persistence.GeneratedValue;
import javax.persistence.GenerationType;
import javax.persistence.Id;
import javax.persistence.Table;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Pattern;

import app.models.enums.TipoFuncionario;
import app.util.DateUtils;

/**
 * @author Douglas Fernandes
 * @since 22/11/2013
 */

@Entity
@Table(name = "FUNCIONARIO")
public class Funcionario implements Pojo {
	
	private static final long serialVersionUID = -3665024959008159704L;
	
	
	@Id
	@GeneratedValue(strategy = GenerationType.IDENTITY)
	@Column(name = "ID")
	private Long id;
	
	private Endereco endereco;
	
	private Servico servico;
	
	@NotNull(message = "O nome deve ser preenchido")
	@Column(name = "NOME", columnDefinition = "varchar(200)")
	private String nome;
	
	@NotNull(message = "O tipo deve ser preenchido")
	@Column(name = "TIPO", columnDefinition = "varchar(30)")
	@Enumerated(EnumType.STRING)
	private TipoFuncionario tipo;
	
	@Pattern(regexp = "[0-9]{4}/[0-9]{2}/[0-9]{2}", message = "A data de nascimento esta mal formada")
	@NotNull(message = "A data de nascimento deve ser preenchida")
	@Column(name = "DATA_NASCIMENTO", columnDefinition = "date")
	private String dataNascimento;
	
	@Column(name = "TELEFONE1", columnDefinition = "varchar(30)")
	private String telefone1;
	
	@Column(name = "TELEFONE2", columnDefinition = "varchar(30)")
	private String telefone2;
	
	@NotNull(message = "O CPF deve ser preenchido")
	@Column(name = "CPF", columnDefinition = "varchar(30)")
	private String cpf;
	
	@NotNull(message = "O RG deve ser preenchido")
	@Column(name = "RG", columnDefinition = "varchar(11)")
	private String rg;
	
	@Column(name = "EMAIL", columnDefinition = "varchar(70)")
	private String email;
	
	@NotNull(message = "O percentual de comissao deve ser preenchido")
	@Column(name = "PERCENTUAL_COMISSAO", columnDefinition = "integer")
	private Integer percentualComissao;
	
	@Pattern(regexp = "[0-9]{4}/[0-9]{2}/[0-9]{2}", message = "A data de cadastro esta mal formada")
	@NotNull(message = "A data de cadastro deve ser preenchida")
	@Column(name = "DATA_CADASTRO", columnDefinition = "date")
	private String data = DateUtils.getDataAtual();
	
	@Pattern(regexp = "[0-9]{1,2}:[0-9]{1,2}:[0-9]{1,2}", message = "A hora do cadastro esta mal formada")
	@NotNull(message = "A hora de cadastro deve ser preenchida")
	@Column(name = "HORA", columnDefinition = "time")
	private String hora = DateUtils.getHoraAtual();
	
	
	public void setId(Long id) {
		this.id = id;
	}

	public Long getId() {
		return id;
	}

	public void setEndereco(Endereco endereco) {
		this.endereco = endereco;
	}

	public Endereco getEndereco() {
		return endereco;
	}

	public void setServico(Servico servico) {
		this.servico = servico;
	}

	public Servico getServico() {
		return servico;
	}

	public void setNome(String nome) {
		this.nome = nome;
	}

	public String getNome() {
		return nome;
	}

	public void setTipo(TipoFuncionario tipo) {
		this.tipo = tipo;
	}

	public TipoFuncionario getTipo() {
		return tipo;
	}

	public void setDataNascimento(String dataNascimento) {
		this.dataNascimento = dataNascimento;
	}

	public String getDataNascimento() {
		return dataNascimento;
	}

	public void setTelefone1(String telefone1) {
		this.telefone1 = telefone1;
	}

	public String getTelefone1() {
		return telefone1;
	}

	public void setTelefone2(String telefone2) {
		this.telefone2 = telefone2;
	}

	public String getTelefone2() {
		return telefone2;
	}

	public void setCpf(String cpf) {
		this.cpf = cpf;
	}

	public String getCpf() {
		return cpf;
	}

	public void setRg(String rg) {
		this.rg = rg;
	}

	public String getRg() {
		return rg;
	}

	public void setEmail(String email) {
		this.email = email;
	}

	public String getEmail() {
		return email;
	}

	public void setPercentualComissao(Integer percentualComissao) {
		this.percentualComissao = percentualComissao;
	}

	public Integer getPercentualComissao() {
		return percentualComissao;
	}

	public String getData() {
		return data;
	}

	public void setData(String data) {
		this.data = data;
	}

	public String getHora() {
		return hora;
	}

	public void setHora(String hora) {
		this.hora = hora;
	}

}
